from notebook.services.config import ConfigManagercm = ConfigManager()cm.update('livereveal', { 'width': 1440, 'height': 900, 'scroll': True,})xxxxxxxxxxIdeatore di Python Guido Van Rossum (Olanda 1956)<img src="Guido_van_Rossum_200.jpg" heigh="400" />* Guido Van Rossum crea all'inizio degli anni 90 Python* Guido ha lavorato alla Google fino al 2012 poi alla Dropbox e nel 2020 nella Developer Division alla Microsoft* Obbiettivi di Python: semplice, Open Source, linguaggio naturale, tempi di sviluppo brevi* Dittattore benevolo della comunità, quest'anno ha lasciato la guidaIdeatore di Python Guido Van Rossum (Olanda 1956)

xxxxxxxxxx# Perchè imparare Python?xxxxxxxxxx* E' Open Source* Multi piattaforma* Sintassi semplice* Linguaggio di alto livello* È indirizzato agli oggetti* Estensibile / incorporabile* Comunità vastissima* Numerosissime librerie* Varietà di utilizzi* Elevate prestazioni* È usato da aziende importantixxxxxxxxxx## Alcuni degli uilizzatori principali|  |  |  || --- | --- | --- ||  |  |  |... e molte altre.| ... e molte altre. |
xxxxxxxxxx## Alcune fra le principli librerie|  |  |  || --- | --- | --- ||  |  |  || --- | --- | --- ||  |  |  || --- | --- | --- |
xxxxxxxxxx## Filosofia di Python* Programmazione indirizzata agli oggetti* Ambiente aperto (si può accedere a tutto)* Sintassi semplice e ordinata* Ricco di convenzioni e con poche restrizioni (spoiler)* Batterie incluse (https://docs.python.org/3/library/index.html)* Moduli per tutto super ottimizzatixxxxxxxxxx## Python interattivo### Molto comodo per la sperimentazione * IDLE * Riga di comando * Jupyter Per questa presentazione ho utilizzato Jupyter, ma voi userete IDLE, per semplicità.xxxxxxxxxx## Partiamo da un classico<center><img src="topolino.gif" /><center>print()Questa funzione è la differenza più evidente fra la versione 2.7 e le 3.x.
print()
Questa funzione è la differenza più evidente fra la versione 2.7 e le 3.x.
xxxxxxxxxxAlcuni esempiAlcuni esempi
xxxxxxxxxxprint("Test di output!")xxxxxxxxxxprint("Testiamo", "un output", "multiplo", "con i numeri", 3, " e ", 2.7)xxxxxxxxxxprint('Prima riga', end='')print(' e ancora la prima.')xxxxxxxxxx## VariabiliIn Python, non serve dichiarare le variabili. Ogni volta che si assegna un valore ad una "etichetta" viene automaticamente creata una variabile del tipo adeguato:In Python, non serve dichiarare le variabili. Ogni volta che si assegna un valore ad una "etichetta" viene automaticamente creata una variabile del tipo adeguato:
xxxxxxxxxxnumero = 3decimale = 7.5frase = "Ciao Mondo!!"print(type(numero).__name__, numero)print(type(decimale).__name__, decimale)print(type(frase).__name__, frase)xxxxxxxxxx## Riutilizzo delle variabiliSe ad un'etichetta viene riassegnato un nuovo valore, il tipo può cambiare (sconsigliato)<center><img src="david.gif" /><center>Se ad un'etichetta viene riassegnato un nuovo valore, il tipo può cambiare (sconsigliato)

xxxxxxxxxxnumero = "Questo non è un numero"frase = 42print(type(numero).__name__, numero)print(type(frase).__name__, frase)xxxxxxxxxx### In Python TUTTO è un oggetto<center><img src="oggetto.gif" /><center>
xxxxxxxxxxVediamo alcuni esempiVediamo alcuni esempi
xxxxxxxxxxa = int('10')print(a.bit_length())a = int('65000')print(a.bit_length())xxxxxxxxxxb = "facciamo una prova."print(b.count('a'))print(b.split())print(b.upper())print(b.title())xxxxxxxxxx## Aggiungiamo un po' di interattivitàChiedere input all'utenteChiedere input all'utente
xxxxxxxxxx# -*- coding: utf-8 -*-# -*- coding: cp1252 -*-nome = input("Come ti chiami? ")print("Ciao " + nome + ", Python è cool!")xxxxxxxxxx## Formattazione stringheEsistono alcune modalità per la formattazione delle stringheEsistono alcune modalità per la formattazione delle stringhe
xxxxxxxxxxmodo1 = "Numero di %s, %d" % ("prova1", 1)modo2 = "Numero di {}, {}".format("prova2", 2)modo3 = "Numero di {1}, {0}".format(3, "prova3")numero, testo = 4, "prova4"modo4 = f"Numero di {testo}, {numero}"print(modo1)print(modo2)print(modo3)print(modo4)xxxxxxxxxx## Due note sulle virgolette per le stringheSi possono utilizzare diversi tipi di virgolette:- `'primo'`- `"secondo"`- `'''terzo'''`- `"""quarto"""`Si possono utilizzare diversi tipi di virgolette:
'primo'"secondo"'''terzo'''"""quarto"""xxxxxxxxxxprint('Primo testo con l\'apostrofo\n')print("Secondo testo con l'apostrofo\n")print("""Terzo testcon degli invii a capo.""")print('''Quarto testcon degli invii a capo.''')xxxxxxxxxx### prefissi letteraliSono alcune lettere da anteporre alle costanti stringa, per specificarne alcuni comportamenti o rappresentazioni.Vediamo alcuni esempi ...Sono alcune lettere da anteporre alle costanti stringa, per specificarne alcuni comportamenti o rappresentazioni. Vediamo alcuni esempi ...
xxxxxxxxxx# rappresentazione binariabinaria = b"Prova di stringa binaria\n"print(binaria)xxxxxxxxxx# Decodifica di una bufferprint(binaria.decode())xxxxxxxxxx# Codifica di una stringastringa = "Prova di stringa binaria\n"print(stringa.encode("utf-16"))xxxxxxxxxx# Rappresentazione di stringa 'normale's1 = "Questa è una stringa \n ed è normale!"print(s1)xxxxxxxxxx# Rappresentazione di stringa 'raw's2 = r"Questa è una stringa \n ed è raw!"print(s2)xxxxxxxxxx# Un pessimo esempio di stringa raws3 = r"C:\Users\Luca"print(s3)xxxxxxxxxx# ... e la portabilità?!<center><img src="angry-god.gif" width="900" /><center>
xxxxxxxxxx#### formatted( ... ancora sulla formattazione dalla versione 3.6)( ... ancora sulla formattazione dalla versione 3.6)
xxxxxxxxxx# inizializzo alcune variabilivariabile_numerica = 5variabile_stringa = "prova5"modo5 = f"Numero di {variabile_stringa}, {variabile_numerica}"print(modo5)xxxxxxxxxx### sliceLo slice in Python consente di prendere porzioni di oggetti "lista", in maniera semplice e molto leggibileLo slice in Python consente di prendere porzioni di oggetti "lista", in maniera semplice e molto leggibile
xxxxxxxxxxtesto = "Questa è una frase da tagliare."# Questa è una frase da tagliare.# ^0print(testo[0])xxxxxxxxxx# Questa è una frase da tagliare.# ^-1print(testo[-1])xxxxxxxxxx# Questa è una frase da tagliare.# ^3 ^-4print(testo[3:-4])xxxxxxxxxx# Questa è una frase da tagliare.# ^3 ^12print(testo[3:12])xxxxxxxxxx# Questa è una frase da tagliare.# ^-14 ^24print(testo[-14:24])xxxxxxxxxx### TupleOggetti immutabili (lo sono anche le stringhe)Oggetti immutabili (lo sono anche le stringhe)
xxxxxxxxxxvar_tupla = (1, 2, "terzo")print(var_tupla)var_tupla[1] = 77xxxxxxxxxxvar_tupla = var_tupla[:1] + (77,) + var_tupla[2:]print(var_tupla)xxxxxxxxxxvar_lista = ['a', 'b', 3]print(var_lista)var_lista[1] = "secondo"print(var_lista)var_lista.append('aggiunto')print(var_lista)xxxxxxxxxxvar_voti = {'Luca': 7, 'Max': 8, 'Maria': 7}print(var_voti)print(f"Il voto di Luca è {var_voti['Luca']}.")var_voti['Silvia'] = 8.5print(var_voti)xxxxxxxxxxprimo = {'Luca', 'Luigi', 'Maria'}secondo = {'Andrea', 'Luigi', 'Silvia'}print(primo)print(secondo)print(primo | secondo)print(primo - secondo)print(primo & secondo)xxxxxxxxxx## Controllo di flusso<center><img src="ghost-buster.gif" width="800" /><center>Python, ovviamente, fornisce diversi dichiarazioni per controllare il flusso dei programmi, come molti altri linguaggi, anche se con alcuni "colpi di scena".(ricordatevi di non incrociare mai i flussi!)
Python, ovviamente, fornisce diversi dichiarazioni per controllare il flusso dei programmi, come molti altri linguaggi, anche se con alcuni "colpi di scena".
(ricordatevi di non incrociare mai i flussi!)
xxxxxxxxxxnumero_stringa = input("Inserisci un numero: ")numero = int(numero_stringa)if(numero > 10): print(f"{numero} è maggiore di 10.")elif(numero < 10): print(f"{numero} è ninore di 10.")else: print(f"Hai inserito 10.")xxxxxxxxxxpippo = Trueprint("True è", "True" if pippo else "False")pippo = Falseprint("False è", "True" if pippo else "False")print("'prova' è", "True" if "prova" else "False")print("'' è", "True" if "" else "False")print("[] è", "True" if [] else "False")print("[1, 2, 3] è", "True" if [1, 2, 3] else "False")xxxxxxxxxxfor i in range(5): print(i)xxxxxxxxxxlista_test = ['Margherita', 'Tulipano', 'Orchidea', 'Rosa', 'Rododendro']for fiore in lista_test: if fiore == 'Rosa': print('Trovato!') break else: print(fiore)xxxxxxxxxxfor i in range(10): if i % 2 == 0: print(f'{i}: numero pari') continue print(f'{i}: numero dispari')xxxxxxxxxxcicli = input('Quanti cicli? ')for i in range(int(cicli)): if i > 5: break else: print(f'Ciclo {i}')else: print('Ho eseguito tutti i cicli.')xxxxxxxxxxif 3 > 2: passelse: print('Test')xxxxxxxxxxvariabile_test = Truei = 0while variabile_test: if i > 3: variabile_test = False else: i += 1 print(f'i = {i}, variabile_test = {variabile_test}')print('Ciclo terminato')xxxxxxxxxx# match (structural pattern matching)dalla versioe 3.10dalla versioe 3.10
xxxxxxxxxxstatus = 404match status: case 400: print("Bad request") case 404: print("Not found") case 418: print("I'm a teapot") case _: print("Unknown!!")xxxxxxxxxxstatus = 400match status: case 400: print("Bad request") case 404: print("Not found") case 418: print("I'm a teapot") case _: print("Unknown!!")xxxxxxxxxx# assegnazione "tricheco" (walrus)dalla versioe 3.10dalla versioe 3.10
xxxxxxxxxxif(n := 10): print(f"Valore di {n}.")xxxxxxxxxxdef somma(a, b): """Somma due numeri""" return a + b,5print(somma(1, 2))print(somma(7, 33))xxxxxxxxxxI parametri alle funzioni sono passati sempre per riferimento ...I parametri alle funzioni sono passati sempre per riferimento ...
xxxxxxxxxx... anche se non sembra!... anche se non sembra!
xxxxxxxxxxuno, due = 1, 2print(uno, due)def cambia(primo, secondo): """Scambia due valori""" primo, secondo = secondo, primo print(primo, secondo) cambia(uno, due)print(uno, due)xxxxxxxxxxuno, due = [1], [2]print(uno, due)def cambia(primo, secondo): """Scambia il primo elemento delle liste""" primo[0], secondo[0] = secondo[0], primo[0] print(primo, secondo) cambia(uno, due)print(uno, due)xxxxxxxxxxclass automobile(): """Rappresenta il concetto di auto""" colore = 'Rosso' alimentazione = 'Benzina' def accendi(self): """Accende l'auto""" self.accesa = True def spegni(self): """Spegne l'auto""" self.accesa = Falsexxxxxxxxxxmacchina = automobile()print(macchina.colore)print(macchina.alimentazione)print(macchina.accesa)xxxxxxxxxxa = automobile()b = automobile()print(a.colore, b.colore)automobile.colore = 'Bianco'print(a.colore, b.colore)a.colore = 'Verde'print(a.colore, b.colore)xxxxxxxxxxclass automobile(): """Rappresenta il concetto di auto""" def __init__(self, colore, alimentazione): """Il costruttore""" self.colore = colore self.alimentazione = alimentazione self.accesa = False def accendi(self): """Accende l'auto""" self.accesa = True def spegni(self): """Spegne l'auto""" self.accesa = Falsexxxxxxxxxxmacchina = automobile('verde', 'GPL')print(macchina.colore)print(macchina.alimentazione)print(macchina.accesa)macchina.accendi()print(macchina.accesa)xxxxxxxxxx### Metodi e attributi privatixxxxxxxxxxclass automobile(): """Rappresenta il concetto di auto""" def __init__(self): """Il costruttore""" self.__accesa = False def accendi(self): """Accende l'auto""" self.__accesa = True def spegni(self): """Spegne l'auto""" self.__accesa = False def stato(self): """Dice se è accesa""" return self.__accesaxxxxxxxxxx#### Esempi d'usoL'elemento `__accesa` è raggiungibile da fuori?L'elemento __accesa è raggiungibile da fuori?
xxxxxxxxxxprint(macchina.__accesa)xxxxxxxxxxProviamo un uso miglioreProviamo un uso migliore
xxxxxxxxxxmacchina = automobile()print(macchina.stato())macchina.accendi()print(macchina.stato())macchina.spegni()print(macchina.stato())xxxxxxxxxxL'elemento `__accesa` è raggiungibile da fuori?# Ricco di convenzioni e con poche restrizioni(spoiler)L'elemento __accesa è raggiungibile da fuori?
(spoiler)
xxxxxxxxxxprint(macchina._automobile__accesa)